<?php

/**
 * Предоставляет интерфейс для доступа к движку кеширования
 */
class CacheController implements iCacheController {
	
	private static $engine = null;
	private static $enabled = false;
	private static $defaultLifetime = 0;
		
	private function __construct () {}
	
	/**
	 * Инициализация движка кеширования
	 * @param string $engineName название движка
	 * @return void
	 */
	public static function loadEngine ($engineName) {
		$regedit = Regedit::getInstance();
		
		if ((int) $regedit->get ('//settings/cache/enable')) {
			self::$enabled = true;
			
			self::$defaultLifetime = (int) $regedit->get ('//settings/cache/default_lifetime');
			
			$engineClassFile = ENGINE_ROOT . '/classes/CacheController/backend/' . $engineName . '.php';
			if (!file_exists ($engineClassFile)) {
				throw new CoreException (lang('error_backend_engine_not_exists',__CLASS__));
			}
			
			include ENGINE_ROOT . '/classes/CacheController/backend/iCacheControllerBackend.php';
			include $engineClassFile;
			
			$className = 'cache_engine_' . $engineName;
			self::$engine = new $className;
		}
	}
	
	/**
	 * Получить данные
	 * @param string $key ключ
	 * @param integer $lifetime допустимое время жизни в секундах
	 * @return mixed
	 */
	public static function load($key, $lifetime = false) {
		if (!self::$enabled) {
			return false;
		}
		return self::$engine->load($key, $lifetime === false ? self::$defaultLifetime : $lifetime);
	}
	
	/**
	 * Сохранить данные
	 * @param string $key ключ
	 * @param mixed $value данные
	 * @param integer $lifetime допустимое время жизни в секундах
	 * @return void
	 */
	public static function save($key, $value, $lifetime = false) {
		if (self::$enabled) {
			self::$engine->save($key, $value, $lifetime === false ? self::$defaultLifetime : $lifetime);
		}
	}
	
	/**
	 * 
	 * @param string $key
	 * @return void
	 */
	public static function delete($key) {
		if (self::$enabled) {
			self::$engine->delete($key);
		}
	}
	
}
